package ua.diploma.front;

import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.apache.log4j.Logger;

import ua.diploma.core.ServiseFactory;
import ua.diploma.user.UserBean;
import static ua.diploma.core.Constants.USER_BEAN_ATTRIBUTE;

/**
 * Слушатель сессии, при создании сессии в неё кладется юзербин.
 * 
 * @author netstalk3r
 */
@WebListener
public class SessionListener implements HttpSessionListener {

	/**
	 * логгер
	 */
	private static final Logger log = Logger.getLogger(SessionListener.class);

	/**
	 * Конструктор по умолчанию.
	 */
	public SessionListener() {
		super();
	}

	/**
	 * метод вызываеться при создании сессии
	 */
	public void sessionCreated(HttpSessionEvent sessionEvent) {
		log.info("Слушатель сессии");
		HttpSession session = sessionEvent.getSession();
		ServletContext servletContext = session.getServletContext();
		servletContext.log("Session with id = " + session.getId()
				+ " is started");
		log.info(session);
		if (session != null) {
			UserBean userBean = new UserBean();
			session.setAttribute(USER_BEAN_ATTRIBUTE, userBean);
			log.info("Cессия с id = " + session.getId() + " началась.");
		}
	}

	/**
	 * метод вызываеться при завершении сессии
	 * при завершении сессии, удаляем пользователя из чата, 
	 * если он там находился
	 */
	public void sessionDestroyed(HttpSessionEvent sessionEvent) {
		log.info("Слушатель сессии");
		HttpSession session = sessionEvent.getSession();
		UserBean userBean = (UserBean) session.getAttribute(USER_BEAN_ATTRIBUTE);
		if (userBean.isAuthorised()) {		
			ServiseFactory.getLoginServise().logOut(userBean.getLogin());
		}
		session.removeAttribute("userBean");
		ServletContext servletContext = session.getServletContext();
		servletContext.log("Session with id = " + session.getId()
				+ " is finished");
		log.info("Cессия с id = " + session.getId() + " закончилсь.");
	}

}
